home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / pmode / exc_dx02 / demo_1.c < prev    next >
C/C++ Source or Header  |  1994-10-25  |  2KB  |  77 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <pharlap.h>
  6. #include "exc.h"
  7.  
  8.  
  9. void main (int argc, char **argv)
  10. {
  11.   char ex;
  12.  
  13.   if ((argc != 2) || (strcmp(argv[1],"-?") == 0))
  14.   {
  15.     printf("Usage: DEMO_1 <exc number>\n"   \
  16.            "\t 0  divide error\n");
  17. #if defined(__BORLANDC__) || defined(__MSC__)
  18.     printf("\t 3  break point\n"            \
  19.            "\t 4  integer overflow\n"       \
  20.            "\t 5  array bound\n"            \
  21.            "\t 6  Illegal opcode\n");
  22. #endif
  23.     printf("\t11  segment not present\n" \
  24.            "\t12  stack fault\n"         \
  25.            "\t13  general protection\n"  \
  26.            "\t14  page fault\n");
  27.     exit(1);
  28.   }
  29.  
  30.   InstallExcHandler (NO_EXC_USR_HOOK,   /* no application exception hook */
  31.                      DO_EXC_REG_DUMP);  /* make regs/instr/callee dump   */
  32.  
  33.   ex = atoi(argv[1]);
  34.   switch (ex)
  35.   {
  36.     UINT page;
  37.     FARPTR fp;
  38.     char buf[1];
  39.     char *p;
  40.     unsigned int limit[2] = {1,10};
  41.     int a=0, b=3, c;
  42.  
  43.     case 0  : c = b/a;
  44.               a += c;     /* BCC32 optimizes off c=b/a */
  45.               break;
  46.  
  47. #if defined(__BORLANDC__) || defined(__MSC__)
  48.     case 3  : _asm int 3
  49.               break;
  50.     case 4  : c = b * 0x7FFFFFFF;
  51.               _asm into
  52.               a += c;
  53.               break;
  54.     case 5  : _asm mov esi,11
  55.               _asm bound esi,limit
  56.               break;
  57.     case 6  : _asm db 0C2h,34h,12h,0Fh,31h
  58.               break;
  59. #endif
  60.     case 11 : FP_SET(fp,NULL,0x84);
  61.               PeekFarByte(fp);
  62.               break;
  63.     case 12 : p = (char*)buf[0x10000];
  64.               *p = 0;
  65.               break;
  66.     case 13 : p  = (char*) -1;
  67.               *p = 1;
  68.               break;
  69.     case 14 : _dx_add_umapg(SS_DATA,1,&page);
  70.               p = (char*)page;
  71.               *p = 1;
  72.               break;
  73.     default : printf ("No action for exception %d defined",ex);
  74.   }
  75. }
  76.  
  77.